archivo <- './data/Datos-dax-nasdaq-originales.xlsx'
dax_nasdaq_dow <- read_excel(archivo, col_names = TRUE)
names(dax_nasdaq_dow)
## [1] "Fecha"                            "DAX 30 PERFORMANCE - PRICE INDEX"
## [3] "NASDAQ COMPOSITE - PRICE INDEX"
names(dax_nasdaq_dow) <- c("Fecha", "DAX", "NASDAQ")
names(dax_nasdaq_dow)
## [1] "Fecha"  "DAX"    "NASDAQ"
summary(dax_nasdaq_dow)
##      Fecha                          DAX              NASDAQ        
##  Min.   :1971-02-05 00:00:00   Min.   :  372.3   Min.   :   54.87  
##  1st Qu.:1983-07-21 18:00:00   1st Qu.:  710.9   1st Qu.:  247.13  
##  Median :1996-01-04 12:00:00   Median : 2320.2   Median : 1057.44  
##  Mean   :1996-01-05 02:24:00   Mean   : 4048.6   Mean   : 1877.67  
##  3rd Qu.:2008-06-19 06:00:00   3rd Qu.: 6351.3   3rd Qu.: 2508.07  
##  Max.   :2020-12-03 00:00:00   Max.   :13789.0   Max.   :12377.18
indice_dax <- as.numeric(unlist(dax_nasdaq_dow[,"DAX"]))
rend_log_dax <- diff(log(indice_dax))
#agrego un 0 al principio para poder agregar la columna de rendimientos al dataframe original 
rend_log_dax <- c(0, rend_log_dax)

indice_nasdaq <- as.numeric(unlist(dax_nasdaq_dow[,"NASDAQ"]))
rend_log_nasdaq <- diff(log(indice_nasdaq))
#agrego un NA al principio para poder agregar la columna de rendimientos al dataframe original 
rend_log_nasdaq <- c(0, rend_log_nasdaq)
df_dax_nasdaq_dow <- cbind(dax_nasdaq_dow,
                           rdto_dax=rend_log_dax, 
                           rdto_nasdaq=rend_log_nasdaq
                           )

# reordenamos columnas
df_dax_nasdaq_dow <- df_dax_nasdaq_dow[, c(1, 2, 4, 3, 5)]
head(df_dax_nasdaq_dow)

Estadísticas principales del dataset.

summary(df_dax_nasdaq_dow)
##      Fecha                          DAX             rdto_dax         
##  Min.   :1971-02-05 00:00:00   Min.   :  372.3   Min.   :-0.1370990  
##  1st Qu.:1983-07-21 18:00:00   1st Qu.:  710.9   1st Qu.:-0.0055691  
##  Median :1996-01-04 12:00:00   Median : 2320.2   Median : 0.0002207  
##  Mean   :1996-01-05 02:24:00   Mean   : 4048.6   Mean   : 0.0002508  
##  3rd Qu.:2008-06-19 06:00:00   3rd Qu.: 6351.3   3rd Qu.: 0.0065904  
##  Max.   :2020-12-03 00:00:00   Max.   :13789.0   Max.   : 0.1079747  
##      NASDAQ          rdto_nasdaq        
##  Min.   :   54.87   Min.   :-0.1314915  
##  1st Qu.:  247.13   1st Qu.:-0.0041536  
##  Median : 1057.44   Median : 0.0007315  
##  Mean   : 1877.67   Mean   : 0.0003706  
##  3rd Qu.: 2508.07   3rd Qu.: 0.0058327  
##  Max.   :12377.18   Max.   : 0.1325465

Estadísticas más completas del rendimiento del índice NASDAQ

#Cálculo simple de estadísticos descriptivos
min <- min(df_dax_nasdaq_dow$rdto_nasdaq, na.rm = TRUE)
q1 <- quantile(df_dax_nasdaq_dow$rdto_nasdaq, probs = 0.25, na.rm = TRUE)
media <- mean.default(df_dax_nasdaq_dow$rdto_nasdaq, na.rm = TRUE)
media_rec <- mean.default(df_dax_nasdaq_dow$rdto_nasdaq, trim = 0.025, na.rm = TRUE)
mediana <- median.default(df_dax_nasdaq_dow$rdto_nasdaq, na.rm = TRUE)
moda <- mfv(df_dax_nasdaq_dow$rdto_nasdaq)
var <- var(df_dax_nasdaq_dow$rdto_nasdaq, na.rm = TRUE)
desvest <- sd(df_dax_nasdaq_dow$rdto_nasdaq, na.rm = TRUE)
q3 <- quantile(df_dax_nasdaq_dow$rdto_nasdaq, probs = 0.75, na.rm = TRUE)
max <- max(df_dax_nasdaq_dow$rdto_nasdaq, na.rm = TRUE)
s <- skew(df_dax_nasdaq_dow$rdto_nasdaq)
c <- kurtosi(df_dax_nasdaq_dow$rdto_nasdaq)

#Valores de estadísticos como vector
descriptivos_rdto_nasdaq <- as.numeric(round(c(min, q1, media, media_rec, mediana, moda,
                          var, desvest, q3, max, s, c),5))

nombres_desc_rdto_nasdaq <- c("Mínimo", "Q1", "Media", "Media recortada", "Mediana", "Moda",
             "Varianza", "Desviación Estándar", "Q3", "Máximo", "Simetría", "Curtosis")

cuadro_eda_nasdaq <- as.data.frame(rbind(nombres_desc_rdto_nasdaq,descriptivos_rdto_nasdaq))
tabla_eda_nasdaq <- data.frame(t(cuadro_eda_nasdaq[-1]),row.names = NULL)
colnames(tabla_eda_nasdaq) <- c("Estadístico","rdto_nasdaq")
#tabla_eda_nasdaq
# Generación de una tabla
kable(tabla_eda_nasdaq, align = c("l", "c")) %>% 
  kable_styling(full_width = F, bootstrap_options = "condensed") %>% 
  column_spec(1, width = "12em") %>% 
  column_spec(2, width = "10em") 
Estadístico rdto_nasdaq
Q1 -0.00415
Media 0.00037
Media recortada 0.00047
Mediana 0.00073
Moda 0
Varianza 0.00015
Desviación Estándar 0.01231
Q3 0.00583
Máximo 0.13255
Simetría -0.38931
Curtosis 10.88228

Se agregan las columnas correspondientes a los días de la semana.

df_dax_nasdaq_dow <- as_tibble(df_dax_nasdaq_dow)
df_dax_nasdaq_dow <- mutate(df_dax_nasdaq_dow,
                            dia = weekdays(df_dax_nasdaq_dow$Fecha, abbreviate = FALSE)
)
df_dax_nasdaq_dow$dia[df_dax_nasdaq_dow$dia == "miércoles"] <- "miercoles"
head(df_dax_nasdaq_dow)

Gráfico de la serie temporal de rendimientos del índice NASDAQ

Se ordenan los días de la semana.

## [1] "viernes"   "lunes"     "martes"    "miercoles" "jueves"
## [1] "lunes"     "martes"    "miercoles" "jueves"    "viernes"

Se generan valores binarios para los días de la semana.

df_dax_nasdaq_dow_dummies <- df_dax_nasdaq_dow %>% 
  mutate(var = 1) %>%                                   # Asigno un 1 en todas las filas de una columna
  spread(key = dia, value = var, fill = 0) %>%          # Creo las variables dummy 

# Reordeno y elimino lunes
dplyr::select(Fecha, DAX, rdto_dax, NASDAQ, rdto_nasdaq, martes, miercoles, jueves, viernes)  
head(df_dax_nasdaq_dow_dummies)

Regresión mínimo cuadrática

Para el cálculo de la regresión se descartan las columnas Fecha, DAX y NASDAQ, quedando seleccionadas solamente las columnas de los días y la correspondiente al Rendimiento NASDAQ.

analysis_nasdaq <- df_dax_nasdaq_dow_dummies %>% dplyr::select(-Fecha,-DAX,-NASDAQ,-rdto_dax)
head(analysis_nasdaq)

Se calculan los valores de correlación entre los días de la semana y el rendimiento.

cor(analysis_nasdaq)
##             rdto_nasdaq      martes   miercoles      jueves     viernes
## rdto_nasdaq  1.00000000 -0.01058179  0.02816619  0.01754642  0.01622782
## martes      -0.01058179  1.00000000 -0.25000000 -0.25000000 -0.25000000
## miercoles    0.02816619 -0.25000000  1.00000000 -0.25000000 -0.25000000
## jueves       0.01754642 -0.25000000 -0.25000000  1.00000000 -0.25000000
## viernes      0.01622782 -0.25000000 -0.25000000 -0.25000000  1.00000000

Se observa una correlación negativa del día martes.

library(GGally)
ggpairs(analysis_nasdaq, lower = list(continuous = "smooth"),
        diag = list(continuous = "barDiag"), axisLabels = "none")

Se genera la regresión lineal con el objetivo de explicar los valores de rdto_nasdaq en base a las variables dicotómicas independientes correspondientes a los días de la semana. En este caso se tiene la ecuación \(R_t = \beta_2 M_t + \beta_3 X_t + \beta_4 J_t + \beta_5 V_t + \epsilon_t\) Las variables \(M_t\), \(X_t\), \(J_t\) y \(V_t\) son las variables dummy asociadas a los días de la semana, tomando valor 1 si la observación corresponde a dicho día y 0 en otro caso. Los coeficientes \(\beta_2, \beta_3, \beta_4\) y \(\beta_5\) representan los rendimientos medios de cada día. El término de error se representa mediante \(\epsilon_t\). En este caso se han considerado 4 variables dummys correspondientes a los días martes, miércoles, jueves y viernes para tratar de explicar la variabilidad de los rendimientos tomando como base el día lunes.

Se configura y ejecuta el modelo.

full_model_nasdaq <- lm(rdto_nasdaq ~ martes + miercoles + jueves + viernes, data = analysis_nasdaq)
summary(full_model_nasdaq)
## 
## Call:
## lm(formula = rdto_nasdaq ~ martes + miercoles + jueves + viernes, 
##     data = analysis_nasdaq)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.130597 -0.004545  0.000623  0.005414  0.131482 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -0.0008941  0.0002411  -3.708  0.00021 ***
## martes       0.0010042  0.0003410   2.945  0.00324 ** 
## miercoles    0.0019584  0.0003410   5.743 9.51e-09 ***
## jueves       0.0016968  0.0003410   4.976 6.57e-07 ***
## viernes      0.0016644  0.0003410   4.881 1.07e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.01229 on 12995 degrees of freedom
## Multiple R-squared:  0.003291,   Adjusted R-squared:  0.002985 
## F-statistic: 10.73 on 4 and 12995 DF,  p-value: 1.114e-08

En base a los resultados del modelo se ve que los regresores externos son significativos para explicar la volatilidad de los rendimientos de NASDAQ. Se observa que el día martes tiene un poder explicativo algo menor (0.1%) comparado con los días miércoles, jueves y viernes (0.2%).

#El modelo con las 4 variables dummys introducidas como predictores tiene un valor de \(R_2\) bajo (0.003291). #El p-value del estadístico F es significativo (1.114e-08).

En los resultados se observa que todos los p-value de la prueba de hipótesis del estadístico t son significativos.

Si se aplica la estrategia de stepwise mixto para selección de los mejores predictores confirma que el modelo configurado es adecuado.

step(object = full_model_nasdaq, direction = "both", trace = 1)
## Start:  AIC=-114357.8
## rdto_nasdaq ~ martes + miercoles + jueves + viernes
## 
##             Df Sum of Sq    RSS     AIC
## <none>                   1.9644 -114358
## - martes     1 0.0013108 1.9657 -114351
## - viernes    1 0.0036011 1.9680 -114336
## - jueves     1 0.0037430 1.9681 -114335
## - miercoles  1 0.0049857 1.9694 -114327
## 
## Call:
## lm(formula = rdto_nasdaq ~ martes + miercoles + jueves + viernes, 
##     data = analysis_nasdaq)
## 
## Coefficients:
## (Intercept)       martes    miercoles       jueves      viernes  
##  -0.0008941    0.0010042    0.0019584    0.0016968    0.0016644

REVISAR LA CONCLUSION

En este caso parecen ser significativos todos…. sera que el efecto dia de la semana es el lunes?????

confint(full_model_nasdaq)
##                     2.5 %        97.5 %
## (Intercept) -0.0013667284 -0.0004214548
## martes       0.0003357480  0.0016725666
## miercoles    0.0012899427  0.0026267613
## jueves       0.0010284238  0.0023652424
## viernes      0.0009959523  0.0023327709

REGRESIÓN INCORPORANDO LA ECUACIÓN DE VARIANZA COMO UN MODELO GARCH(1,1)

Se generan los vectores de rendimiento para NASDAQ y los vectores de los días martes a viernes.

n <- nrow(df_dax_nasdaq_dow_dummies)

rdto_nasdaq <- as.numeric(unlist(df_dax_nasdaq_dow_dummies[2:n,"rdto_nasdaq"]))

vardias_ma <- as.numeric(unlist(df_dax_nasdaq_dow_dummies[2:n,"martes"]))
vardias_mi <- as.numeric(unlist(df_dax_nasdaq_dow_dummies[2:n,"miercoles"]))
vardias_ju <- as.numeric(unlist(df_dax_nasdaq_dow_dummies[2:n,"jueves"]))
vardias_vi <- as.numeric(unlist(df_dax_nasdaq_dow_dummies[2:n,"viernes"]))

vardias <- cbind(vardias_ma,vardias_mi,vardias_ju,vardias_vi)

Se prueban distintos modelos para analizarlos, se analizan si los residuos son ruido blanco y se seleccionan los modelos mas adecuados.

Modelo sGARCH(1,1) con External Regressors en modelo de media. Distribución std.

spec_nasdaq1 <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1), 
                        submodel = NULL, external.regressors = NULL, variance.targeting = FALSE), 
                        mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
                        distribution.model = "std")
garch_nasdaq1 <- ugarchfit(spec=spec_nasdaq1,data=rdto_nasdaq)

Modelo sGARCH(1,1) con External Regressors en modelo de media y de varianza. Distribución std

spec_nasdaq1_2er <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1), 
                        submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE), 
                        mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
                        distribution.model = "std")
garch_nasdaq1_2er <- ugarchfit(spec=spec_nasdaq1_2er,data=rdto_nasdaq)

Modelo gjrGARCH(1,1) con External Regressors en modelo de media. Distribución std

spec_nasdaq2 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1), 
                    submodel = NULL, external.regressors = NULL, variance.targeting = FALSE), 
                    mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
               distribution.model = "std")
garch_nasdaq2 <- ugarchfit(spec=spec_nasdaq2,data=rdto_nasdaq)

Modelo gjrGARCH(1,1) con External Regressors en modelo de media y de varianza. Distribución std

spec_nasdaq2_2er <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1), 
                    submodel = NULL, external.regressors  = vardias[,1:4], variance.targeting = FALSE), 
                    mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
               distribution.model = "std")
garch_nasdaq2_2er <- ugarchfit(spec=spec_nasdaq2_2er,data=rdto_nasdaq)

Modelo eGARCH(1,1) con External Regressors en modelo de media. Distribución std

spec_nasdaq3 <- ugarchspec(variance.model = list(model = "eGARCH", garchOrder = c(1, 1), 
                    submodel = NULL, external.regressors = NULL, variance.targeting = FALSE), 
                    mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
               distribution.model = "std")
garch_nasdaq3 <- ugarchfit(spec=spec_nasdaq3,data=rdto_nasdaq)

Modelo eGARCH(1,1) con External Regressors en modelo de media y de varianza. Distribución std

spec_nasdaq3_2er <- ugarchspec(variance.model = list(model = "eGARCH", garchOrder = c(1, 1), 
                    submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE), 
                    mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
               distribution.model = "std")
garch_nasdaq3_2er <- ugarchfit(spec=spec_nasdaq3_2er,data=rdto_nasdaq)

Modelo sGARCH(1,1) con External Regressors en modelo de media. Distribución norm

spec_nasdaq4 <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1), 
                    submodel = NULL, external.regressors = NULL, variance.targeting = FALSE), 
                    mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
               distribution.model = "norm")
garch_nasdaq4 <- ugarchfit(spec=spec_nasdaq4,data=rdto_nasdaq)

Modelo sGARCH(1,1) con External Regressors en modelo de media y de varianza. Distribución norm

spec_nasdaq4_2er <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1), 
                    submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE), 
                    mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
               distribution.model = "norm")
garch_nasdaq4_2er <- ugarchfit(spec=spec_nasdaq4_2er,data=rdto_nasdaq)

Modelo gjrGARCH(1,1) con External Regressors en modelo de media. Distribución norm

spec_nasdaq5 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1), 
                    submodel = NULL, external.regressors = NULL, variance.targeting = FALSE), 
                    mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
               distribution.model = "norm")
garch_nasdaq5 <- ugarchfit(spec=spec_nasdaq5,data=rdto_nasdaq)

Modelo gjrGARCH(1,1) con External Regressors en modelo de media y de varianza. Distribución norm

spec_nasdaq5_2er <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1), 
                    submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE), 
                    mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
               distribution.model = "norm")
garch_nasdaq5_2er <- ugarchfit(spec=spec_nasdaq5_2er,data=rdto_nasdaq)

Modelo eGARCH(1,1) con External Regressors en modelo de media. Distribución norm

spec_nasdaq6 <- ugarchspec(variance.model = list(model = "eGARCH", garchOrder = c(1, 1), 
                    submodel = NULL, external.regressors = NULL, variance.targeting = FALSE), 
                    mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
               distribution.model = "norm")
garch_nasdaq6 <- ugarchfit(spec=spec_nasdaq6,data=rdto_nasdaq)

Modelo eGARCH(1,1) con External Regressors en modelo de media y de varianza. Distribución norm

spec_nasdaq6_2er <- ugarchspec(variance.model = list(model = "eGARCH", garchOrder = c(1, 1), 
                    submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE), 
                    mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
               distribution.model = "norm")
garch_nasdaq6_2er <- ugarchfit(spec=spec_nasdaq6_2er,data=rdto_nasdaq)

Modelos GARCH(1,1) con ARMA(1,0)

Modelo sGARCH(1,1) con ARMA(1,0) con External Regressors en modelo de media. Distribución std

spec_nasdaq1_ar1 <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1), 
                        submodel = NULL, external.regressors = NULL, variance.targeting = FALSE), 
                        mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
                        distribution.model = "std")
garch_nasdaq1_ar1 <- ugarchfit(spec=spec_nasdaq1_ar1,data=rdto_nasdaq)

Modelo sGARCH(1,1) con ARMA(1,0) con External Regressors en modelo de media y de varianza. Distribución std

spec_nasdaq1_2er_ar1 <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1), 
                        submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE), 
                        mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
                        distribution.model = "std")
garch_nasdaq1_2er_ar1 <- ugarchfit(spec=spec_nasdaq1_2er_ar1,data=rdto_nasdaq)

Modelo gjrGARCH(1,1) con ARMA(1,0) con External Regressors en modelo de media. Distribución std

spec_nasdaq2_ar1 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1), 
                    submodel = NULL, external.regressors = NULL, variance.targeting = FALSE), 
                    mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
               distribution.model = "std")
garch_nasdaq2_ar1 <- ugarchfit(spec=spec_nasdaq2_ar1,data=rdto_nasdaq)

Modelo gjrGARCH(1,1) con ARMA(1,0) con External Regressors en modelo de media y de varianza. Distribución std

spec_nasdaq2_2er_ar1 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1), 
                    submodel = NULL, external.regressors  = vardias[,1:4], variance.targeting = FALSE), 
                    mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
               distribution.model = "std")
garch_nasdaq2_2er_ar1 <- ugarchfit(spec=spec_nasdaq2_2er_ar1,data=rdto_nasdaq)

Modelo eGARCH(1,1) con ARMA(1,0) con External Regressors en modelo de media. Distribución std

spec_nasdaq3_ar1 <- ugarchspec(variance.model = list(model = "eGARCH", garchOrder = c(1, 1), 
                    submodel = NULL, external.regressors = NULL, variance.targeting = FALSE), 
                    mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
               distribution.model = "std")
garch_nasdaq3_ar1 <- ugarchfit(spec=spec_nasdaq3_ar1,data=rdto_nasdaq)

Modelo eGARCH(1,1) con ARMA(1,0) con External Regressors en modelo de media y de varianza. Distribución std

spec_nasdaq3_2er_ar1 <- ugarchspec(variance.model = list(model = "eGARCH", garchOrder = c(1, 1), 
                    submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE), 
                    mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
               distribution.model = "std")
garch_nasdaq3_2er_ar1 <- ugarchfit(spec=spec_nasdaq3_2er_ar1,data=rdto_nasdaq)

Modelo sGARCH(1,1) con ARMA(1,0) con External Regressors en modelo de media. Distribución norm

spec_nasdaq4_ar1 <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1), 
                    submodel = NULL, external.regressors = NULL, variance.targeting = FALSE), 
                    mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
               distribution.model = "norm")
garch_nasdaq4_ar1 <- ugarchfit(spec=spec_nasdaq4_ar1,data=rdto_nasdaq)

Modelo sGARCH(1,1) con ARMA(1,0) con External Regressors en modelo de media y de varianza. Distribución norm

spec_nasdaq4_2er_ar1 <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1), 
                    submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE), 
                    mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
               distribution.model = "norm")
garch_nasdaq4_2er_ar1 <- ugarchfit(spec=spec_nasdaq4_2er_ar1,data=rdto_nasdaq)

Modelo gjrGARCH(1,1) con ARMA(1,0) con External Regressors en modelo de media. Distribución norm

spec_nasdaq5_ar1 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1), 
                    submodel = NULL, external.regressors = NULL, variance.targeting = FALSE), 
                    mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
               distribution.model = "norm")
garch_nasdaq5_ar1 <- ugarchfit(spec=spec_nasdaq5_ar1,data=rdto_nasdaq)
#Se realiza el test de Ljung-Box sobre los residuos del modelo
#Ljung-Box
resid.arch <- as.numeric(residuals(garch_nasdaq5_ar1, standardize=TRUE))
lb_lag1 <- Box.test(resid.arch, lag=1, type="Ljung-Box", fitdf=0)
lb_lag2 <- Box.test(resid.arch, lag=2, type="Ljung-Box", fitdf=0)
lb_lag5 <- Box.test(resid.arch, lag=5, type="Ljung-Box", fitdf=0)

# creo un tibble con el resumen del modelo y los valores de Ljung-Box
t_comp_lb_nasdaq5_ar1 <- tibble(vmodel = garch_nasdaq5_ar1@model[["modeldesc"]][["vmodel"]],
                    vp = garch_nasdaq5_ar1@model[["modelinc"]][["alpha"]],
                    vq = garch_nasdaq5_ar1@model[["modelinc"]][["beta"]],
                    vxreg = garch_nasdaq5_ar1@model[["modelinc"]][["vxreg"]],
                    mp = garch_nasdaq5_ar1@model[["modelinc"]][["ar"]],
                    mq = garch_nasdaq5_ar1@model[["modelinc"]][["ma"]],
                    mxreg = garch_nasdaq5_ar1@model[["modelinc"]][["mxreg"]],
                    dist = garch_nasdaq5_ar1@model[["modeldesc"]][["distribution"]],
                    lb1 = lb_lag1$p.value,
                    lb2 = lb_lag2$p.value,
                    lb5 = lb_lag5$p.value,
                    ic1 = infocriteria(garch_nasdaq5_ar1)[1]
)

# agrego linea de resumen del modelo y muestro la tabla
t_comp_lb <- rbind(t_comp_lb,t_comp_lb_nasdaq5_ar1)
rownames(t_comp_lb) <- c("garch_nasdaq1","garch_nasdaq1_2er","garch_nasdaq2","garch_nasdaq2_2er",
                         "garch_nasdaq3","garch_nasdaq3_2er","garch_nasdaq4","garch_nasdaq4_2er",
                         "garch_nasdaq5","garch_nasdaq5_2er","garch_nasdaq6","garch_nasdaq6_2er",
                         "garch_nasdaq1_ar1","garch_nasdaq1_2er_ar1","garch_nasdaq2_ar1","garch_nasdaq2_2er_ar1",
                         "garch_nasdaq3_ar1","garch_nasdaq3_2er_ar1","garch_nasdaq4_ar1","garch_nasdaq4_2er_ar1",
                         "garch_nasdaq5_ar1")
# kable(t_comp_lb, row.names = TRUE)

# muestro la tabla resumen del modelo y valores de Ljung-Box test de los residuos del modelo
# t_resumen_lb <- knitr::kable(t_comp_lb,
#                              digits = 6,
#                              caption = "Resumen del modelo y Ljung-Box test", booktabs = TRUE) %>%
#                              kable_styling(font_size = 12)
# column_spec(t_resumen_lb, 1:12, width = "2em")#, bold = TRUE, italic = TRUE)

Modelo gjrGARCH(1,1) con ARMA(1,0) con External Regressors en modelo de media y de varianza. Distribución norm

spec_nasdaq5_2er_ar1 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1), 
                    submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE), 
                    mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
               distribution.model = "norm")
garch_nasdaq5_2er_ar1 <- ugarchfit(spec=spec_nasdaq5_2er_ar1,data=rdto_nasdaq)

Modelo eGARCH(1,1) con ARMA(1,0) con External Regressors en modelo de media. Distribución norm

spec_nasdaq6_ar1 <- ugarchspec(variance.model = list(model = "eGARCH", garchOrder = c(1, 1), 
                    submodel = NULL, external.regressors = NULL, variance.targeting = FALSE), 
                    mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
               distribution.model = "norm")
garch_nasdaq6_ar1 <- ugarchfit(spec=spec_nasdaq6_ar1,data=rdto_nasdaq)

Modelo eGARCH(1,1) con ARMA(1,0) con External Regressors en modelo de media y de varianza. Distribución norm

spec_nasdaq6_2er_ar1 <- ugarchspec(variance.model = list(model = "eGARCH", garchOrder = c(1, 1), 
                    submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE), 
                    mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
               distribution.model = "norm")
garch_nasdaq6_2er_ar1 <- ugarchfit(spec=spec_nasdaq6_2er_ar1,data=rdto_nasdaq)
Resumen del modelo y Ljung-Box test
vmodel vp vq vxreg mp mq mxreg dist lb1 lb2 lb5 ic1
garch_nasdaq1 sGARCH 1 1 0 0 0 4 std 0.000000 0.000000 0.000000 -6.592634
garch_nasdaq1_2er sGARCH 1 1 4 0 0 4 std 0.000000 0.000000 0.000000 -6.312623
garch_nasdaq2 gjrGARCH 1 1 0 0 0 4 std 0.000000 0.000000 0.000000 -6.599331
garch_nasdaq2_2er gjrGARCH 1 1 4 0 0 4 std 0.000000 0.000000 0.000000 -6.598722
garch_nasdaq3 eGARCH 1 1 0 0 0 4 std 0.000000 0.000000 0.000000 -6.599416
garch_nasdaq3_2er eGARCH 1 1 4 0 0 4 std 0.000000 0.000000 0.000000 -6.600576
garch_nasdaq4 sGARCH 1 1 0 0 0 4 norm 0.000000 0.000000 0.000000 -6.535743
garch_nasdaq4_2er sGARCH 1 1 4 0 0 4 norm 0.000000 0.000000 0.000000 -6.535131
garch_nasdaq5 gjrGARCH 1 1 0 0 0 4 norm 0.000000 0.000000 0.000000 -6.451319
garch_nasdaq5_2er gjrGARCH 1 1 4 0 0 4 norm 0.000000 0.000000 0.000000 -6.546925
garch_nasdaq6 eGARCH 1 1 0 0 0 4 norm 0.000000 0.000000 0.000000 -6.547122
garch_nasdaq6_2er eGARCH 1 1 4 0 0 4 norm 0.000000 0.000000 0.000000 -6.548609
garch_nasdaq1_ar1 sGARCH 1 1 0 1 0 4 std 0.000000 0.000000 0.000000 -6.316185
garch_nasdaq1_2er_ar1 sGARCH 1 1 4 1 0 4 std 0.123425 0.040525 0.000185 -6.612414
garch_nasdaq2_ar1 gjrGARCH 1 1 0 1 0 4 std 0.532617 0.155750 0.001150 -6.620320
garch_nasdaq2_2er_ar1 gjrGARCH 1 1 4 1 0 4 std 0.524547 0.154552 0.001100 -6.619718
garch_nasdaq3_ar1 eGARCH 1 1 0 1 0 4 std 0.611984 0.237821 0.000950 -6.620650
garch_nasdaq3_2er_ar1 eGARCH 1 1 4 1 0 4 std 0.522935 0.209618 0.000874 -6.622143
garch_nasdaq4_ar1 sGARCH 1 1 0 1 0 4 norm 0.889061 0.181313 0.001083 -6.555544
garch_nasdaq4_2er_ar1 sGARCH 1 1 4 1 0 4 norm 0.838116 0.175989 0.001018 -6.554935
garch_nasdaq5_ar1 gjrGARCH 1 1 0 1 0 4 norm 0.446337 0.151454 0.000560 -6.568670
garch_nasdaq5_2er_ar1 gjrGARCH 1 1 4 1 0 4 norm 0.447147 0.151573 0.000561 -6.568061
garch_nasdaq6_ar1 eGARCH 1 1 0 1 0 4 norm 0.422174 0.170781 0.000306 -6.568404
garch_nasdaq6_2er_ar1 eGARCH 1 1 4 1 0 4 norm 0.518762 0.182988 0.000333 -6.569748
t_resumen_lb
Resumen del modelo y Ljung-Box test
vmodel vp vq vxreg mp mq mxreg dist lb1 lb2 lb5 ic1
garch_nasdaq1 sGARCH 1 1 0 0 0 4 std 0.000000 0.000000 0.000000 -6.592634
garch_nasdaq1_2er sGARCH 1 1 4 0 0 4 std 0.000000 0.000000 0.000000 -6.312623
garch_nasdaq2 gjrGARCH 1 1 0 0 0 4 std 0.000000 0.000000 0.000000 -6.599331
garch_nasdaq2_2er gjrGARCH 1 1 4 0 0 4 std 0.000000 0.000000 0.000000 -6.598722
garch_nasdaq3 eGARCH 1 1 0 0 0 4 std 0.000000 0.000000 0.000000 -6.599416
garch_nasdaq3_2er eGARCH 1 1 4 0 0 4 std 0.000000 0.000000 0.000000 -6.600576
garch_nasdaq4 sGARCH 1 1 0 0 0 4 norm 0.000000 0.000000 0.000000 -6.535743
garch_nasdaq4_2er sGARCH 1 1 4 0 0 4 norm 0.000000 0.000000 0.000000 -6.535131
garch_nasdaq5 gjrGARCH 1 1 0 0 0 4 norm 0.000000 0.000000 0.000000 -6.451319
garch_nasdaq5_2er gjrGARCH 1 1 4 0 0 4 norm 0.000000 0.000000 0.000000 -6.546925
garch_nasdaq6 eGARCH 1 1 0 0 0 4 norm 0.000000 0.000000 0.000000 -6.547122
garch_nasdaq6_2er eGARCH 1 1 4 0 0 4 norm 0.000000 0.000000 0.000000 -6.548609
garch_nasdaq1_ar1 sGARCH 1 1 0 1 0 4 std 0.000000 0.000000 0.000000 -6.316185
garch_nasdaq1_2er_ar1 sGARCH 1 1 4 1 0 4 std 0.123425 0.040525 0.000185 -6.612414
garch_nasdaq2_ar1 gjrGARCH 1 1 0 1 0 4 std 0.532617 0.155750 0.001150 -6.620320
garch_nasdaq2_2er_ar1 gjrGARCH 1 1 4 1 0 4 std 0.524547 0.154552 0.001100 -6.619718
garch_nasdaq3_ar1 eGARCH 1 1 0 1 0 4 std 0.611984 0.237821 0.000950 -6.620650
garch_nasdaq3_2er_ar1 eGARCH 1 1 4 1 0 4 std 0.522935 0.209618 0.000874 -6.622143
garch_nasdaq4_ar1 sGARCH 1 1 0 1 0 4 norm 0.889061 0.181313 0.001083 -6.555544
garch_nasdaq4_2er_ar1 sGARCH 1 1 4 1 0 4 norm 0.838116 0.175989 0.001018 -6.554935
garch_nasdaq5_ar1 gjrGARCH 1 1 0 1 0 4 norm 0.446337 0.151454 0.000560 -6.568670
garch_nasdaq5_2er_ar1 gjrGARCH 1 1 4 1 0 4 norm 0.447147 0.151573 0.000561 -6.568061
garch_nasdaq6_ar1 eGARCH 1 1 0 1 0 4 norm 0.422174 0.170781 0.000306 -6.568404
garch_nasdaq6_2er_ar1 eGARCH 1 1 4 1 0 4 norm 0.518762 0.182988 0.000333 -6.569748
tabla_ljung_box <- as_tibble(t_comp_lb)
tabla <- tabla_ljung_box %>% filter(lb1 > 0.05, lb2 > 0.05)#, lb5 > 0.05)
tabla <- arrange(tabla, desc(ic1))                        

# tabla con valores de Ljung Box adecuados
t_resumen_lb <- knitr::kable(tabla,
                             digits = 6,
                             caption = "Modelos con valores adecuados del Ljung-Box test", booktabs = TRUE) %>%
                             kable_styling(font_size = 11)
column_spec(t_resumen_lb, 1:10, width = "7em")#, bold = TRUE, italic = TRUE)
Modelos con valores adecuados del Ljung-Box test
vmodel vp vq vxreg mp mq mxreg dist lb1 lb2 lb5 ic1
sGARCH 1 1 4 1 0 4 norm 0.838116 0.175989 0.001018 -6.554935
sGARCH 1 1 0 1 0 4 norm 0.889061 0.181313 0.001083 -6.555544
gjrGARCH 1 1 4 1 0 4 norm 0.447147 0.151573 0.000561 -6.568061
eGARCH 1 1 0 1 0 4 norm 0.422174 0.170781 0.000306 -6.568404
gjrGARCH 1 1 0 1 0 4 norm 0.446337 0.151454 0.000560 -6.568670
eGARCH 1 1 4 1 0 4 norm 0.518762 0.182988 0.000333 -6.569748
gjrGARCH 1 1 4 1 0 4 std 0.524547 0.154552 0.001100 -6.619718
gjrGARCH 1 1 0 1 0 4 std 0.532617 0.155750 0.001150 -6.620320
eGARCH 1 1 0 1 0 4 std 0.611984 0.237821 0.000950 -6.620650
eGARCH 1 1 4 1 0 4 std 0.522935 0.209618 0.000874 -6.622143

Significado de cada columna de la tabla

vmodel= modelo GARCH implementado.

vp= componente ARCH del modelo de la varianza.

vq= componente GARCH del modelo de la varianza.

vxreg= cantidad de regresores externos en el modelo de la varianza.

mp= componente AR del modelo de la media.

mq= componente MA del modelo de la media.

mxreg= cantidad de regresores externos en el modelo de la media.

dist= distribución que siguen los errores.

lb1= valor del test de Ljung-Box para el rezago uno.

lb2= valor del test de Ljung-Box para el rezago dos.

lb5= valor del test de Ljung-Box para el rezago cinco.

ic1= valor de akaike del modelo.

Análisis de los resultados

Para poder analizar los modelos y elegir el mejor, debemos observar los valores del test de Ljung-Box y el de los criterios de información. En el caso del test de Ljung-Box buscamos un valor mayor a 0.05 que nos indique que los residuos del modelo son ruido blanco y no contienen información significativa. En la tabla se observan solo los modelos que cumplen con este filtro. Se muestran los valores del test para los rezagos uno, dos y cinco (lb1, lb2, lb5). Respecto a los criterios de información, en la tabla se muestra el valor de akaike de los modelos (ic1). El mejor modelo es el modelo con menor valor de akaike, por ello la tabla se encuentra ordenada de forma descendiente de acuerdo a este valor.

Siguiendo estas indicaciones se puede observar que los dos mejores modelos son:

1_ eGARCH con GARCH(1,1), ARMA(1,0), distribucion std y ER en media y varianza (garch_nasdaq3_2er_ar1)

2_ eGARCH con GARCH(1,1), ARMA(1,0), distribucion std y ER solo en media (garch_nasdaq3_ar1)

Parámetros de los dos mejores modelos y sus valores de significancia:

garch_nasdaq3_2er_ar1
## 
## *---------------------------------*
## *          GARCH Model Fit        *
## *---------------------------------*
## 
## Conditional Variance Dynamics    
## -----------------------------------
## GARCH Model  : eGARCH(1,1)
## Mean Model   : ARFIMA(1,0,0)
## Distribution : std 
## 
## Optimal Parameters
## ------------------------------------
##         Estimate  Std. Error    t value Pr(>|t|)
## mu     -0.000476    0.000132   -3.60591 0.000311
## ar1     0.152379    0.008952   17.02139 0.000000
## mxreg1  0.000694    0.000175    3.96135 0.000075
## mxreg2  0.001864    0.000195    9.54566 0.000000
## mxreg3  0.001754    0.000176    9.95558 0.000000
## mxreg4  0.002096    0.000172   12.21316 0.000000
## omega   0.034641    0.045165    0.76700 0.443083
## alpha1 -0.069909    0.005401  -12.94409 0.000000
## beta1   0.988178    0.000346 2859.51045 0.000000
## gamma1  0.188443    0.001701  110.75611 0.000000
## vxreg1 -0.073706    0.078599   -0.93774 0.348377
## vxreg2 -0.191688    0.063771   -3.00587 0.002648
## vxreg3 -0.208510    0.063876   -3.26428 0.001097
## vxreg4 -0.265811    0.078080   -3.40434 0.000663
## shape   6.145769    0.327160   18.78523 0.000000
## 
## Robust Standard Errors:
##         Estimate  Std. Error    t value Pr(>|t|)
## mu     -0.000476    0.000143   -3.32395 0.000888
## ar1     0.152379    0.011520   13.22692 0.000000
## mxreg1  0.000694    0.000178    3.89534 0.000098
## mxreg2  0.001864    0.000205    9.08709 0.000000
## mxreg3  0.001754    0.000171   10.24597 0.000000
## mxreg4  0.002096    0.000185   11.32691 0.000000
## omega   0.034641    0.048277    0.71756 0.473029
## alpha1 -0.069909    0.005739  -12.18174 0.000000
## beta1   0.988178    0.000434 2275.07780 0.000000
## gamma1  0.188443    0.003199   58.91425 0.000000
## vxreg1 -0.073706    0.082595   -0.89237 0.372194
## vxreg2 -0.191688    0.065643   -2.92016 0.003499
## vxreg3 -0.208510    0.065434   -3.18656 0.001440
## vxreg4 -0.265811    0.079485   -3.34417 0.000825
## shape   6.145769    0.358107   17.16181 0.000000
## 
## LogLikelihood : 43055.62 
## 
## Information Criteria
## ------------------------------------
##                     
## Akaike       -6.6221
## Bayes        -6.6135
## Shibata      -6.6221
## Hannan-Quinn -6.6193
## 
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
##                         statistic   p-value
## Lag[1]                     0.4081 0.5229353
## Lag[2*(p+q)+(p+q)-1][2]    1.7665 0.3041917
## Lag[4*(p+q)+(p+q)-1][5]   10.1209 0.0009715
## d.o.f=1
## H0 : No serial correlation
## 
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
##                         statistic   p-value
## Lag[1]                      17.61 2.706e-05
## Lag[2*(p+q)+(p+q)-1][5]     18.47 5.086e-05
## Lag[4*(p+q)+(p+q)-1][9]     20.63 1.378e-04
## d.o.f=2
## 
## Weighted ARCH LM Tests
## ------------------------------------
##             Statistic Shape Scale P-Value
## ARCH Lag[3]    0.0476 0.500 2.000  0.8273
## ARCH Lag[5]    0.2162 1.440 1.667  0.9616
## ARCH Lag[7]    2.6877 2.315 1.543  0.5744
## 
## Nyblom stability test
## ------------------------------------
## Joint Statistic:  57.454
## Individual Statistics:              
## mu      0.5417
## ar1    39.9615
## mxreg1  0.5313
## mxreg2  0.1763
## mxreg3  0.2120
## mxreg4  1.6909
## omega   2.8712
## alpha1  6.3345
## beta1   2.6511
## gamma1  0.3574
## vxreg1  3.0117
## vxreg2  2.8854
## vxreg3  3.1181
## vxreg4  2.7214
## shape   0.7413
## 
## Asymptotic Critical Values (10% 5% 1%)
## Joint Statistic:          3.26 3.54 4.07
## Individual Statistic:     0.35 0.47 0.75
## 
## Sign Bias Test
## ------------------------------------
##                    t-value      prob sig
## Sign Bias           2.6365 0.0083860 ***
## Negative Sign Bias  0.8207 0.4118308    
## Positive Sign Bias  0.9750 0.3295864    
## Joint Effect       21.5350 0.0000815 ***
## 
## 
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
##   group statistic p-value(g-1)
## 1    20     157.1    9.213e-24
## 2    30     200.4    1.559e-27
## 3    40     210.2    2.520e-25
## 4    50     220.5    1.320e-23
## 
## 
## Elapsed time : 20.51626
garch_nasdaq3_ar1
## 
## *---------------------------------*
## *          GARCH Model Fit        *
## *---------------------------------*
## 
## Conditional Variance Dynamics    
## -----------------------------------
## GARCH Model  : eGARCH(1,1)
## Mean Model   : ARFIMA(1,0,0)
## Distribution : std 
## 
## Optimal Parameters
## ------------------------------------
##         Estimate  Std. Error   t value Pr(>|t|)
## mu     -0.000465    0.000096   -4.8281  1.0e-06
## ar1     0.151054    0.008843   17.0825  0.0e+00
## mxreg1  0.000684    0.000160    4.2708  1.9e-05
## mxreg2  0.001846    0.000158   11.7083  0.0e+00
## mxreg3  0.001731    0.000155   11.1508  0.0e+00
## mxreg4  0.002091    0.000148   14.1688  0.0e+00
## omega  -0.112287    0.002777  -40.4416  0.0e+00
## alpha1 -0.069959    0.005411  -12.9291  0.0e+00
## beta1   0.988273    0.000340 2904.4355  0.0e+00
## gamma1  0.188426    0.001753  107.5179  0.0e+00
## shape   6.130714    0.326096   18.8003  0.0e+00
## 
## Robust Standard Errors:
##         Estimate  Std. Error   t value Pr(>|t|)
## mu     -0.000465    0.000077   -6.0393  0.0e+00
## ar1     0.151054    0.011107   13.6002  0.0e+00
## mxreg1  0.000684    0.000162    4.2108  2.5e-05
## mxreg2  0.001846    0.000147   12.5979  0.0e+00
## mxreg3  0.001731    0.000136   12.7175  0.0e+00
## mxreg4  0.002091    0.000136   15.3651  0.0e+00
## omega  -0.112287    0.004256  -26.3852  0.0e+00
## alpha1 -0.069959    0.005730  -12.2089  0.0e+00
## beta1   0.988273    0.000426 2318.9295  0.0e+00
## gamma1  0.188426    0.003152   59.7759  0.0e+00
## shape   6.130714    0.355226   17.2586  0.0e+00
## 
## LogLikelihood : 43041.91 
## 
## Information Criteria
## ------------------------------------
##                     
## Akaike       -6.6206
## Bayes        -6.6143
## Shibata      -6.6207
## Hannan-Quinn -6.6185
## 
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
##                         statistic  p-value
## Lag[1]                     0.2573 0.611984
## Lag[2*(p+q)+(p+q)-1][2]    1.5649 0.402142
## Lag[4*(p+q)+(p+q)-1][5]   10.0113 0.001084
## d.o.f=1
## H0 : No serial correlation
## 
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
##                         statistic   p-value
## Lag[1]                      17.54 2.812e-05
## Lag[2*(p+q)+(p+q)-1][5]     18.39 5.353e-05
## Lag[4*(p+q)+(p+q)-1][9]     20.85 1.210e-04
## d.o.f=2
## 
## Weighted ARCH LM Tests
## ------------------------------------
##             Statistic Shape Scale P-Value
## ARCH Lag[3]   0.04041 0.500 2.000  0.8407
## ARCH Lag[5]   0.35858 1.440 1.667  0.9243
## ARCH Lag[7]   3.11321 2.315 1.543  0.4924
## 
## Nyblom stability test
## ------------------------------------
## Joint Statistic:  56.1468
## Individual Statistics:              
## mu      0.6757
## ar1    39.7524
## mxreg1  0.5355
## mxreg2  0.1708
## mxreg3  0.2314
## mxreg4  1.6514
## omega   2.9178
## alpha1  6.5205
## beta1   2.7010
## gamma1  0.3597
## shape   0.8294
## 
## Asymptotic Critical Values (10% 5% 1%)
## Joint Statistic:          2.49 2.75 3.27
## Individual Statistic:     0.35 0.47 0.75
## 
## Sign Bias Test
## ------------------------------------
##                    t-value      prob sig
## Sign Bias           2.6699 7.596e-03 ***
## Negative Sign Bias  0.8666 3.862e-01    
## Positive Sign Bias  1.0909 2.753e-01    
## Joint Effect       23.0967 3.855e-05 ***
## 
## 
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
##   group statistic p-value(g-1)
## 1    20     158.5    5.044e-24
## 2    30     191.6    6.993e-26
## 3    40     226.4    2.896e-28
## 4    50     242.9    1.721e-27
## 
## 
## Elapsed time : 15.23828

-

Modificar la evaluación de los modelos luego de decidir con cuales nos quedamos…

-

Evaluación de los 2 mejores modelos

modelo garch_nasdaq2_2er_ar1

Tabla comparativa de los p-valores de los external regressors para los dos mejores modelos.

El primer modelo seleccionado es gjrGARCH(1,1) con ARMA(1,0) como modelo de media y distribución std. Se han incluido regresores externos como variables dummys tanto en media como en varianza.

t_modelo_nasdaq2 <- print(round(garch_nasdaq2_2er_ar1@fit$matcoef,6), digits = 5)
##         Estimate  Std. Error    t value Pr(>|t|)
## mu     -0.000453    0.000099  -4.550297 0.000005
## ar1     0.151053    0.007416  20.369500 0.000000
## mxreg1  0.000665    0.000021  31.503561 0.000000
## mxreg2  0.001829    0.000148  12.350793 0.000000
## mxreg3  0.001734    0.000151  11.478805 0.000000
## mxreg4  0.002094    0.000159  13.189218 0.000000
## omega   0.000001    0.000000   3.136710 0.001709
## alpha1  0.056884    0.002532  22.468485 0.000000
## beta1   0.890673    0.001950 456.639688 0.000000
## gamma1  0.092596    0.003286  28.179407 0.000000
## vxreg1  0.000000    0.000000   1.026186 0.304804
## vxreg2  0.000000    0.000000   0.348084 0.727777
## vxreg3  0.000000    0.000000   0.000231 0.999816
## vxreg4  0.000000    0.000000   0.035045 0.972044
## shape   6.090970    0.256353  23.760129 0.000000
kable(t_modelo_nasdaq2, row.names = TRUE)
Estimate Std. Error t value Pr(>|t|)
mu -0.000453 0.000099 -4.550297 0.000005
ar1 0.151053 0.007416 20.369500 0.000000
mxreg1 0.000665 0.000021 31.503561 0.000000
mxreg2 0.001829 0.000148 12.350793 0.000000
mxreg3 0.001734 0.000151 11.478805 0.000000
mxreg4 0.002094 0.000159 13.189218 0.000000
omega 0.000001 0.000000 3.136710 0.001709
alpha1 0.056884 0.002532 22.468485 0.000000
beta1 0.890673 0.001950 456.639688 0.000000
gamma1 0.092596 0.003286 28.179407 0.000000
vxreg1 0.000000 0.000000 1.026186 0.304804
vxreg2 0.000000 0.000000 0.348084 0.727777
vxreg3 0.000000 0.000000 0.000231 0.999816
vxreg4 0.000000 0.000000 0.035045 0.972044
shape 6.090970 0.256353 23.760129 0.000000
# muestro la tabla resumen del modelo y valores de Ljung-Box test de los residuos del modelo
t_modelo2 <- knitr::kable(t_modelo_nasdaq2,
                             digits = 6,
                             caption = "Modelo gjrGARCH(1,1) con ARMA(1,0)", booktabs = TRUE) %>%
                             kable_styling(font_size = 11)
column_spec(t_modelo2, 1:5, width = "1em")#, bold = TRUE, italic = TRUE)
Modelo gjrGARCH(1,1) con ARMA(1,0)
Estimate Std. Error t value Pr(>|t|)
mu -0.000453 0.000099 -4.550297 0.000005
ar1 0.151053 0.007416 20.369500 0.000000
mxreg1 0.000665 0.000021 31.503561 0.000000
mxreg2 0.001829 0.000148 12.350793 0.000000
mxreg3 0.001734 0.000151 11.478805 0.000000
mxreg4 0.002094 0.000159 13.189218 0.000000
omega 0.000001 0.000000 3.136710 0.001709
alpha1 0.056884 0.002532 22.468485 0.000000
beta1 0.890673 0.001950 456.639688 0.000000
gamma1 0.092596 0.003286 28.179407 0.000000
vxreg1 0.000000 0.000000 1.026186 0.304804
vxreg2 0.000000 0.000000 0.348084 0.727777
vxreg3 0.000000 0.000000 0.000231 0.999816
vxreg4 0.000000 0.000000 0.035045 0.972044
shape 6.090970 0.256353 23.760129 0.000000

De acuerdo a los p-valores de los regresores externos se observa que son significativos. Si se analizan los valores estimados para cada día de la semana se ve que el día martes posee un valor explicativo del 0.01 y los días miércoles, jueves y viernes de 0.02. De acuerdo al valor de \(alpha1\) el rendimiento es explicado en un 5.69% por la volatilidad del día anterior. De acuerdo al valor de \(beta1\) el rendimiento es explicado en un 89% por la varianza ajustada del día anterior.

modelo garch_nasdaq3_2er_ar1

El siguiente modelo seleccionado es eGARCH(1,1) con ARMA(1,0) como modelo de media y distribución std.
Se han incluido regresores externos como variables dummys tanto en media como en varianza.

t_modelo_nasdaq3 <- print(round(garch_nasdaq3_2er_ar1@fit$matcoef,6), digits = 5)
##         Estimate  Std. Error    t value Pr(>|t|)
## mu     -0.000476    0.000132   -3.60591 0.000311
## ar1     0.152379    0.008952   17.02139 0.000000
## mxreg1  0.000694    0.000175    3.96135 0.000075
## mxreg2  0.001864    0.000195    9.54566 0.000000
## mxreg3  0.001754    0.000176    9.95558 0.000000
## mxreg4  0.002096    0.000172   12.21316 0.000000
## omega   0.034641    0.045165    0.76700 0.443083
## alpha1 -0.069909    0.005401  -12.94409 0.000000
## beta1   0.988178    0.000346 2859.51045 0.000000
## gamma1  0.188443    0.001701  110.75611 0.000000
## vxreg1 -0.073706    0.078599   -0.93774 0.348377
## vxreg2 -0.191688    0.063771   -3.00587 0.002648
## vxreg3 -0.208510    0.063876   -3.26428 0.001097
## vxreg4 -0.265811    0.078080   -3.40434 0.000663
## shape   6.145769    0.327160   18.78523 0.000000
kable(t_modelo_nasdaq3, row.names = TRUE)
Estimate Std. Error t value Pr(>|t|)
mu -0.000476 0.000132 -3.605914 0.000311
ar1 0.152379 0.008952 17.021386 0.000000
mxreg1 0.000694 0.000175 3.961353 0.000075
mxreg2 0.001864 0.000195 9.545657 0.000000
mxreg3 0.001754 0.000176 9.955580 0.000000
mxreg4 0.002096 0.000172 12.213163 0.000000
omega 0.034641 0.045165 0.766997 0.443083
alpha1 -0.069909 0.005401 -12.944089 0.000000
beta1 0.988178 0.000346 2859.510447 0.000000
gamma1 0.188443 0.001701 110.756112 0.000000
vxreg1 -0.073706 0.078599 -0.937741 0.348377
vxreg2 -0.191688 0.063771 -3.005874 0.002648
vxreg3 -0.208510 0.063876 -3.264277 0.001097
vxreg4 -0.265811 0.078080 -3.404338 0.000663
shape 6.145769 0.327160 18.785226 0.000000
# muestro la tabla resumen del modelo y valores de Ljung-Box test de los residuos del modelo
t_modelo3 <- knitr::kable(t_modelo_nasdaq3,
                             digits = 6,
                             caption = "Modelo eGARCH(1,1) con ARMA(1,0)", booktabs = TRUE) %>%
                             kable_styling(font_size = 11)
column_spec(t_modelo3, 1:5, width = "1em")#, bold = TRUE, italic = TRUE)
Modelo eGARCH(1,1) con ARMA(1,0)
Estimate Std. Error t value Pr(>|t|)
mu -0.000476 0.000132 -3.605914 0.000311
ar1 0.152379 0.008952 17.021386 0.000000
mxreg1 0.000694 0.000175 3.961353 0.000075
mxreg2 0.001864 0.000195 9.545657 0.000000
mxreg3 0.001754 0.000176 9.955580 0.000000
mxreg4 0.002096 0.000172 12.213163 0.000000
omega 0.034641 0.045165 0.766997 0.443083
alpha1 -0.069909 0.005401 -12.944089 0.000000
beta1 0.988178 0.000346 2859.510447 0.000000
gamma1 0.188443 0.001701 110.756112 0.000000
vxreg1 -0.073706 0.078599 -0.937741 0.348377
vxreg2 -0.191688 0.063771 -3.005874 0.002648
vxreg3 -0.208510 0.063876 -3.264277 0.001097
vxreg4 -0.265811 0.078080 -3.404338 0.000663
shape 6.145769 0.327160 18.785226 0.000000

Para este modelo también se observa que los p-valores de los regresores son significativos y que el poder explicativo de los días de la semana es igual que en el modelo anterior.

De acuerdo al valor de \(alpha1\) el rendimiento es explicado en un 6.99% por la volatilidad del día anterior. De acuerdo al valor de \(beta1\) el rendimiento es explicado en un 98.8% por la varianza ajustada del día anterior.

Por lo tanto se asume que el eGARCH(1,1) con ARMA(1,0) podría ser una alternativa para realizar pronósticos de los rendimientos de NASDAQ.

Comparativa de puntos (b) y (c)

Para el dataset NASDAQ se concluye que la significancia de las variables y los porcentajes dan muy similares entre la regresión mínimo cuadrática y los modelos GARCH. Se considera conveniente incorporar los GARCH porque los coeficientes de \(alpha1\) y \(beta1\) dan significativos, y esto ademas permite ver el comportamiento de la varianza.